/* 
axios二次封装
1. 配置基础路径和超时时间
2. 显示请求加载进度
3. 自动携带token请求头
4. 请求成功返回响应体数据
5. 请求失败提示错误
6. 401错误时, 自动跳转到登陆页面
*/
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import axios from 'axios'
import { getToken,removeToken, removeUser } from '../utils/storageUtils'

/* 1. 配置基础路径和超时时间 */
const request = axios.create({
    baseURL: 'http://localhost:8082',
    timeout:20000
})

// 添加请求拦截器
request.interceptors.request.use((config) => {
    /* 2. 显示请求加载进度 */
    NProgress.start()
    /* 3. 自动携带token请求头 */
    const token = getToken()
    if (token) {
        config.headers['token'] = token;
    }
    return config;
})

// 添加响应拦截器
request.interceptors.response.use(
    response => {
        /* 2. 结束请求加载进度 */
        NProgress.done()
        /* 4. 请求成功返回响应体数据 */
        return response.data
    },
    error => {
        /* 2. 结束请求加载进度 */
        NProgress.done()
        /* 5. 请求失败提示错误 */
        alert(error.message)
        /* 6. 401错误时, 自动跳转到登陆页面 */
        const status = error.response.status
        if (status === 401) {
        // 清除保存的数据
            removeToken()
            removeUser()
            //跳转到login页面
            window.location = '/login.html'
        }
        throw error
    }
)

//暴露request
export default request;